/**
 * @file Bsp_Bq4050.h
 * @author 徐松亮 (5387603@qq.com)
 * @version 1.0
 * @date 2023-09-27
 *
 * @copyright Copyright (c) {2030}  沈阳迈思医疗科技有限公司
 *
 * @brief 驱动层-->锂电池充电管理芯片BQ4050驱动程序
 * @note (仅在h文件描述注释)
 * 	@verbatim
    1.适用芯片:
        STM      :  STM32H743
    2.移植步骤:
        2.1     按项目设定.h文件相关参数
        2.2     在主函数调用初始化函数  BspBq40z50_Init()
        2.3     在100ms周期函数调用函数  BspBq40z50_100ms()
        2.4     在uctsk_Debug.h添加接口声明
    3.验证方法:
        3.1   在Debug环境加入调试指令，执行后循环打印数据，退出后关闭
    4.使用方法:
        4.1   见接口函数
    5.其他说明:
        STM32CubeMx初始化完成
    @endverbatim
 * @todo (仅在h文件描述待办事项)
 * @par 修改日志:
 * <table>
 * <tr><th>日期   <th>版本 <th>作者  <th>描述
 * <tr><td>2023-09-27 <td>1.0     <td>徐松亮     <td>创建初始版本
 * </table>
 */
/* 防止重复编译 (Define to prevent recursive inclusion)------------------------*/
#ifndef __BSP_BQ4050_H
#define __BSP_BQ4050_H
/* 通用头部文件 (General Includes)---------------------------------------------*/
#include "cmsis_os.h"
#include "Module_MemManager.h"
#include "Module_Count.h"
#include "Bsp_GpioIIC.h"
#include "Module_Debug.h"
/* 公有类型定义 (Exported types)-----------------------------------------------*/
typedef union BSP_BQ4050_U_BATTERY_STATUS
{
    uint16_t us_BatteryStatus;
    struct
    {
        uint16_t us_b1_EC0 : 1;
        uint16_t us_b1_EC1 : 1;
        uint16_t us_b1_EC2 : 1;
        uint16_t us_b1_EC3 : 1;
        uint16_t us_b1_FD : 1;
        uint16_t us_b1_FC : 1;
        uint16_t us_b1_DSG : 1;
        uint16_t us_b1_INIT : 1;
        uint16_t us_b1_RTA : 1;
        uint16_t us_b1_RCA : 1;
        uint16_t us_b1_RSVD2 : 1;
        uint16_t us_b1_TDA : 1;
        uint16_t us_b1_OTA : 1;
        uint16_t us_b1_RSVD1 : 1;
        uint16_t us_b1_TCA : 1;
        uint16_t us_b1_OCA : 1;
    } BatteryStatusBit;
} BSP_BQ4050_U_BATTERY_STATUS;
//
typedef struct
{
    BSP_GPIO_IIC_T_INTERFACE *tp_GpioIIC;
    void (*fnp_OsDelay_ms)(uint8_t);
    void (*fnp_WriteGpioPower)(uint8_t);
    void (*fnp_DebugOutStr)(int8_t *);
} BSP_BQ4050_T_INPUT;
typedef struct
{
    //
    uint8_t uc_Communication_State;
    uint8_t uc_Communication_Cmt_ContinueErr;
    uint32_t ul_Communication_Cmt_OK;
    uint32_t ul_Communication_Cmt_ERROR;
    // 单次读取
    uint16_t us_DesignCapacity;
    uint16_t us_DesignVoltage;
    uint16_t us_SerialNumber;
    uint16_t us_CycleCount;
    // 循环读取
    int8_t c_Temp;
    uint16_t us_CellVoltage_mV;
    int16_t s_CellCurrent_mA;
    int16_t s_CellAverageCurrent_mA;
    uint8_t uc_RelativeStateOfCharge;
    uint8_t uc_AbsoluteStateOfCharge;
    uint16_t us_RemainingCapacity_mAh;
    // uint16_t ChargingCurrent_mA;
    // uint16_t ChargingVoltage_mV;
    BSP_BQ4050_U_BATTERY_STATUS u_BatteryStatus;
} BSP_BQ4050_T_OUTPUT;
typedef struct
{
    void (*fnp_Cycle_1000ms)(void *);
} BSP_BQ4050_T_TRANSPLANT;
typedef struct
{
    uint8_t uca_buf[2];
    // 私有变量
    uint8_t uc_DebugTestEnable;
    uint8_t uc_DebugFirst;
    uint8_t uc_CycleStep;
    uint8_t uc_VccResetStep;
    uint16_t us_VccResetTimer_s;
    uint8_t uc_VccResetConditionTimer_s;
} BSP_BQ4050_T_PRIVATE;
typedef struct
{
    BSP_BQ4050_T_INPUT t_Input;
    BSP_BQ4050_T_OUTPUT t_Output;
    BSP_BQ4050_T_TRANSPLANT t_Transplant;
    BSP_BQ4050_T_PRIVATE t_Private;
} BSP_BQ4050_T_INTERFACE;
/* 移植性宏定义 (Transplant define)--------------------------------------------*/
/* 应用性宏定义 (Application define)-------------------------------------------*/
#define BSP_BQ4050_IIC_ADDR 0x16
/* 公有常量声明 (Exported constants)-------------------------------------------*/
/* 公有变量声明 (Exported variables)-------------------------------------------*/
/* 公有函数声明 (Exported functions)-------------------------------------------*/
void BspBq4050_Init(BSP_BQ4050_T_INTERFACE *_tp_interface);
// void BspBq4050_Cycle_1000ms(BSP_BQ4050_T_INTERFACE *_tp_interface);
void BspBq4050_DebugTestOnOff(uint8_t _uc_trueOrFalse, void *_vp_context);
#endif
/********************************END OF FILE***********************************/
